﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Entity;

namespace DAL.Persistencia
{
    public class MontaServicoDAL
    {

        private NewTierraEntities Con;

        public MontaServicoDAL()
        {
            Con = new NewTierraEntities();
        }

        public void Salvar(Monta_Servico m)
        {
            try
            {
                Con.AddToMonta_Servico(m);
                Con.SaveChanges();
            }
            catch 
            {                
                throw;
            }
        }

        public Monta_Servico ObterPorId(int IdMonta)
        {
            try
            {
                return Con.Monta_Servico.Where(m => m.IdMServico == IdMonta).SingleOrDefault();
            }
            catch 
            {                
                throw;
            }
        }

        public void Excluir(Monta_Servico m)
        {
            try
            {
                Con.Monta_Servico.DeleteObject(m);
                Con.SaveChanges();
            }
            catch 
            {                
                throw;
            }
        }

        public void Atualizar(Monta_Servico novo)
        {
            try
            {
                Monta_Servico antigo = ObterPorId(novo.IdMServico);

                antigo.MServico_De                  = novo.MServico_De;
                antigo.MServico_Para                = novo.MServico_Para;
                antigo.MServico_CapMaxima           = novo.MServico_CapMaxima;
                antigo.MServico_Bulk                = novo.MServico_Bulk;
                antigo.MServico_Bulk_Total          = novo.MServico_Bulk_Total;
                antigo.MServico_Bulk_Porc_Taxa      = novo.MServico_Bulk_Porc_Taxa;
                antigo.MServico_Bulk_Porc_Imposto   = novo.MServico_Bulk_Porc_Imposto;
                antigo.MServico_Bulk_Porc_Comissao  = novo.MServico_Bulk_Porc_Comissao;
                antigo.MServico_PorPessoa           = novo.MServico_PorPessoa;
                antigo.MServico_DataFrom            = novo.MServico_DataFrom;
                antigo.MServico_DataTo              = novo.MServico_DataTo;
                antigo.MServico_Obs                 = novo.MServico_Obs;
                antigo.IdTipoTrans                  = novo.IdTipoTrans;
                antigo.S_id                         = novo.S_id;
                antigo.Tipo_Id                      = novo.Tipo_Id;
                antigo.Tipo_categ_id                = novo.Tipo_categ_id;
                antigo.Moeda_id                     = novo.Moeda_id;

                Con.SaveChanges();
            }
            catch 
            {                
                throw;
            }
        }

        public List<Monta_Servico> ListarTodos()
        {
            try
            {
               return Con.Monta_Servico.OrderBy(m => m.S_Servicos_Tipo.Tipo_Nome).ToList();
            }
            catch 
            {                
                throw;
            }
        }

        public List<Monta_Servico> ListarTodos(int IdSupplier)
        {
            try
            {
                return Con.Monta_Servico.Where(m => m.S_id == IdSupplier).OrderBy(m => m.S_Servicos_Tipo.Tipo_Nome).ToList();
            }
            catch
            {
                throw;
            }
        }

        public object ListarTodosOb()
        {
            try
            {

                var query = (from ms in Con.Monta_Servico
                             join mo in Con.Moeda on ms.Moeda_id equals mo.Moeda_id
                             join st in Con.S_Servicos_Tipo on ms.Tipo_Id equals st.Tipo_Id
                             join sc in Con.S_Servicos_Tipo_Categ on st.Tipo_Id equals sc.Tipo_Id
                             join tt in Con.Tipo_Transporte on ms.IdTipoTrans equals tt.IdTipoTrans
                             select new
                             {
                                 ms.IdMServico,
                                 ms.MServico_De,
                                 ms.MServico_Para,
                                 ms.MServico_CapMaxima,
                                 ms.MServico_Bulk,
                                 ms.MServico_Bulk_Total,
                                 ms.MServico_Bulk_Porc_Taxa,
                                 ms.MServico_Bulk_Porc_Imposto,
                                 ms.MServico_Bulk_Porc_Comissao,
                                 ms.MServico_PorPessoa,
                                 ms.MServico_DataFrom,
                                 ms.MServico_DataTo,
                                 ms.MServico_Obs,
                                 mo.Moeda_sigla,
                                 st.Tipo_Nome,
                                 tt.TipoTrans_nome,
                                 sc.Tipo_categ_nome

                             }).ToList();

                return query;
                             
            }
            catch 
            {                
                throw;
            }
        }

    }
}
